﻿using LeRenard.Libraries.PlatformInspection.InfoNodes;
using System;
using System.Collections.Generic;
namespace LeRenard.Libraries.PlatformInspection.Inspectors
{
    /// <summary>
    /// Defines an inspector that retrieves information on specific subject.
    /// </summary>
    public interface IInspector
    {
        /// <summary>
        /// Gets the <see cref="IInspector"/> name.
        /// </summary>
        string Name { get; }

        /// <summary>
        /// Gets the <see cref="IInspector"/> description.
        /// </summary>
        string Description { get; }

        /// <summary>
        /// Gets the information this inspector gathers from it's modules.
        /// </summary>        
        InfoNode GetInformation();

        /// <summary>
        /// Gets the exceptions occured during the last call of <see cref="GetInformation"/>.
        /// </summary>        
        IEnumerable<ExceptionInfo> Exceptions { get; }
    }
}
